// 路由鉴权：项目路由访问条件
import router from './router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
nprogress.configure({ showSpinner: false })
// pinia 不在src目录下 无法访问到 需要引入
import pinia from './store'
import useUserStore from './store/modules/user'
import setting from './setting'
// 获取用户token
let userStore = useUserStore(pinia)

// 全局守卫：项目当中任意路由切换都会触发的钩子
// 全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = `${setting.title}-${to.meta.title}`
  //    访问某个路由前会访问的函数钩子
  // to 你将要访问的那个路由
  // from 你从那个路由而来
  // next 路由的放行函数
  nprogress.start()

  //获取token 判断是否登录
  let token = userStore.token
  let userName = userStore.userName
  if (token) {
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      // 登录成功访问其余路由
      if (userName) {
        next()
      } else {
        // 没有用户信息，重新发送请求获取用户信息
        try {
          await userStore.userInfo()
          // 存在刷新的是异步路由有可能获取到用户信息，异步路由还没有加载完毕，出现空白效果

          next({ ...to, replace: true })
        } catch (error) {
          // token 过期
          //用户手动修改本地存储
          // 退出登录（清空数据）
          await userStore.userLogout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    if (to.path == '/login') {
      next()
    } else {
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
})

//全局的后置守卫
router.afterEach((to: any, from: any) => {
  nprogress.done()
})

// 第一个问题 ：任意路由切换实现进度条业务 --progress
// 第二个问题： 路由鉴权(路由组件访问权限的设置)
